﻿using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Data;
using SoftSource.MVVMC;
using SoftSource.Timecard.Web.Data;
using SoftSource.Reactive;

namespace SoftSource.Timecard.ViewModelInterfaces
{
    public interface IEntryManagementViewModelConsume : IDataViewModelConsume
    {
        #region Properties

        IObservableProperty<PagedCollectionView> Entries { get; }
        PagedCollectionView Projects { get; }
        PagedCollectionView Users { get; }

        #endregion Properties

        #region Methods

        Func<int?, int?, DateTime?, DateTime?, IObservable<Unit>> Refresh { get; }
        Func<EntryLog, Action, UIElement> EditEntryAssociations { get; }
        IObservable<Unit> SaveApprovals { get; }    

        #endregion Methods    
    }
    public interface IEntryManagementViewModelService : IDataViewModelService
    {
        #region Properties

        IEnumerable<EntryLog> EntrySource { get; set; }
        IEnumerable<ProjectSummary> ProjectSource { get; set; }
        IEnumerable<UserSummary> UserSource { get; set; }

        #endregion Properties

        #region Methods

        IObservable<Unit> SaveApprovals { get; set; }
        Func<int?, int?, DateTime?, DateTime?, IObservable<Unit>> Refresh { get; set; }
        Func<EntryLog, Action, UIElement> EditEntryAssociations { get; set; }

        #endregion Methods
    }
    public interface IEntryManagementViewModel : 
        IDataViewModel,
        IEntryManagementViewModelConsume, 
        IEntryManagementViewModelService
    {
    }
}
